home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / c / unixSyscall / RCS / readv.c,v < prev    next >
Text File  |  1991-12-10  |  3KB  |  134 lines

  1. head     1.2;
  2. branch   ;
  3. access   ;
  4. symbols  sprited:1.2.1;
  5. locks    ; strict;
  6. comment  @ * @;
  7.  
  8.  
  9. 1.2
  10. date     90.08.15.15.25.11;  author kupfer;  state Exp;
  11. branches 1.2.1.1;
  12. next     1.1;
  13.  
  14. 1.1
  15. date     88.06.19.14.31.53;  author ouster;  state Exp;
  16. branches ;
  17. next     ;
  18.  
  19. 1.2.1.1
  20. date     91.12.10.16.04.31;  author kupfer;  state Exp;
  21. branches ;
  22. next     ;
  23.  
  24.  
  25. desc
  26. @@
  27.  
  28.  
  29. 1.2
  30. log
  31. @Partial success is okay.  Don't return an error code unless we couldn't
  32. read any bytes at all.
  33. @
  34. text
  35. @/* 
  36.  * readv.c --
  37.  *
  38.  *    Procedure to map from Unix readv system call to Sprite.
  39.  *
  40.  * Copyright 1986 Regents of the University of California
  41.  * All rights reserved.
  42.  */
  43.  
  44. #ifndef lint
  45. static char rcsid[] = "$Header: /sprite/src/lib/c/unixSyscall/RCS/readv.c,v 1.1 88/06/19 14:31:53 ouster Exp Locker: kupfer $ SPRITE (Berkeley)";
  46. #endif not lint
  47.  
  48. #include "sprite.h"
  49. #include "fs.h"
  50. #include "sys.h"
  51. #include "compatInt.h"
  52. #include <sys/types.h>
  53. #include <sys/uio.h>
  54.  
  55.  
  56. /*
  57.  *----------------------------------------------------------------------
  58.  *
  59.  * readv --
  60.  *
  61.  *    Procedure to map from Unix readv system call to Sprite Fs_Read.
  62.  *
  63.  * Results:
  64.  *    UNIX_ERROR is returned upon error, with the actual error code
  65.  *    stored in errno.  Upon success, the number of bytes actually
  66.  *    read is returned.
  67.  *
  68.  * Side effects:
  69.  *    The buffers are filled with the number of bytes indicated by
  70.  *    the returned value.  (Each buffer has no more bytes than was 
  71.  *    specified by that buffer's length parameter.)
  72.  *
  73.  *----------------------------------------------------------------------
  74.  */
  75.  
  76. int
  77. readv(stream, iov, iovcnt)
  78.     int stream;            /* descriptor for stream to read. */
  79.     register struct iovec *iov;    /* pointer to array of iovecs. */
  80.     int iovcnt;            /* number of  iovecs in iov. */
  81. {
  82.     ReturnStatus status;    /* result returned by Fs_Read */
  83.     int amountRead;        /* place to hold number of bytes read */
  84.     int totalRead = 0;    /* place to hold total # of bytes written */
  85.     int i;
  86.  
  87.     for (i=0; i < iovcnt; i++, iov++) {
  88.     status = Fs_Read(stream, iov->iov_len, iov->iov_base, 
  89.                             &amountRead);
  90.     if (status != SUCCESS) {
  91.         break;
  92.     } else {
  93.         totalRead += amountRead;
  94.     }
  95.     }
  96.  
  97.     if (status != SUCCESS && totalRead == 0) {
  98.     errno = Compat_MapCode(status);
  99.     return(UNIX_ERROR);
  100.     } else {
  101.     return(totalRead);
  102.     }
  103. }
  104. @
  105.  
  106.  
  107. 1.2.1.1
  108. log
  109. @Initial branch for Sprite server.
  110. @
  111. text
  112. @d11 1
  113. a11 1
  114. static char rcsid[] = "$Header: /sprite/src/lib/c/unixSyscall/RCS/readv.c,v 1.2 90/08/15 15:25:11 kupfer Exp $ SPRITE (Berkeley)";
  115. @
  116.  
  117.  
  118. 1.1
  119. log
  120. @Initial revision
  121. @
  122. text
  123. @d11 1
  124. a11 1
  125. static char rcsid[] = "$Header: readv.c,v 1.1 87/06/18 18:41:14 andrew Exp $ SPRITE (Berkeley)";
  126. d35 3
  127. a37 2
  128.  *    The buffer is filled with the number of bytes indicated by
  129.  *    the length parameter.  
  130. d63 1
  131. a63 1
  132.     if (status != SUCCESS) {
  133. @
  134.